package com.ycyoes.test.hollis.datastructure;

import java.util.Stack;

/**
 * 如何用栈实现一个队列？
 * 可以使用两个栈来实现一个队列，一个栈用来存储入队的元素，另一个栈用来存储出队的元素。
 * 入队时，直接将元素压入入队栈中。出队时，如果出队栈为空，则将入队栈中的所有元素弹出并压入出队栈中，然后从出队栈中弹出元素；否则直接从出队栈中弹出元素。
 * 这样可以保证出队栈中的元素顺序和队列中的元素顺序相同。
 *
 */
public class MyQueue<T> {
    private Stack<T> stackIn;
    private Stack<T> stackOut;

    public MyQueue() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }

    public void enqueue(T element) {
        stackIn.push(element);
    }

    public T dequeue() {
        if (stackOut.isEmpty()) {
            while (!stackIn.isEmpty()) {
                stackOut.push(stackIn.pop());
            }
        }
        return stackOut.pop();
    }

    public boolean isEmpty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }
}
